package ${table.basePackage}.service;

<#-- 获取主键字段类型 -->
<#assign pkType = "Long">
<#list columns as c>
  <#if (c.isPk?? && c.isPk) || (c.propertyName?? && c.propertyName?lower_case == "id")>
    <#if c.javaType?? && (c.javaType?contains("String") || c.javaType == "String")>
      <#assign pkType = "String">
    <#elseif c.javaType?? && c.javaType != "">
      <#assign pkType = c.javaType?split(".")?last>
    </#if>
    <#break>
  </#if>
</#list>

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;

import com.kexio.common.dto.PageResponse;
import ${table.basePackage}.dto.${table.entityName}DTO;

/**
 * ${table.comment!table.entityName} - 业务接口
 * 
 * 表: ${table.tableName}
 * 
 * @author ${user.name!"系统"}
 * @since ${now?string('yyyy-MM-dd HH:mm:ss')}
 */
public interface ${table.entityName}Service {

    /**
     * 分页查询${table.comment!table.entityName}
     *
     * @param queryDTO 查询条件（含分页参数）
     * @return 分页结果
     */
    PageResponse<${table.entityName}DTO> queryPage(${table.entityName}DTO queryDTO);

    /**
     * 查询${table.comment!table.entityName}详情
     *
     * @param id 主键ID
     * @return ${table.comment!table.entityName}DTO
     */
    ${table.entityName}DTO getDetail(${pkType} id);

    /**
     * 查询所有${table.comment!table.entityName}
     *
     * @param queryDTO 查询条件
     * @return ${table.comment!table.entityName}列表
     */
    List<${table.entityName}DTO> queryList(${table.entityName}DTO queryDTO);

    /**
     * 新增${table.comment!table.entityName}
     *
     * @param dto ${table.comment!table.entityName}信息
     * @return 新增后的DTO
     */
    ${table.entityName}DTO create(${table.entityName}DTO dto);

    /**
     * 修改${table.comment!table.entityName}
     *
     * @param id 主键ID
     * @param dto ${table.comment!table.entityName}信息
     * @return 修改后的DTO
     */
    ${table.entityName}DTO update(${pkType} id, ${table.entityName}DTO dto);

    /**
     * 删除${table.comment!table.entityName}
     *
     * @param id 主键ID
     */
    void deleteById(${pkType} id);

    /**
     * 批量删除${table.comment!table.entityName}
     *
     * @param ids 主键ID列表
     */
    void deleteBatch(List<${pkType}> ids);

<#if table.templateType?has_content && table.templateType == 'multi'>
    /**
     * 新增${table.comment!table.entityName}及关联数据
     *
     * @param dto ${table.comment!table.entityName}信息（含关联数据）
     * @return 新增后的DTO
     */
    ${table.entityName}DTO createWithRelations(${table.entityName}DTO dto);

    /**
     * 修改${table.comment!table.entityName}及关联数据
     *
     * @param id 主键ID
     * @param dto ${table.comment!table.entityName}信息（含关联数据）
     * @return 修改后的DTO
     */
    ${table.entityName}DTO updateWithRelations(${pkType} id, ${table.entityName}DTO dto);

</#if>
    /**
     * 导出${table.comment!table.entityName}数据
     *
     * @param queryDTO 查询条件
     * @param outputStream 输出流
     * @throws IOException IO异常
     */
    void exportData(${table.entityName}DTO queryDTO, OutputStream outputStream) throws IOException;

    /**
     * 导入${table.comment!table.entityName}数据
     *
     * @param inputStream 输入流
     * @param updateSupport 是否更新已存在的数据
     * @return 导入结果（总数、成功数、失败数、错误信息）
     * @throws IOException IO异常
     */
    Map<String, Object> importData(InputStream inputStream, boolean updateSupport) throws IOException;

    /**
     * 下载导入模板
     *
     * @param outputStream 输出流
     * @throws IOException IO异常
     */
    void downloadImportTemplate(OutputStream outputStream) throws IOException;
}
